package 力扣.位运算.移位运算;

public class Test {
    public static void main(String[] args) {
        System.out.println("算术右移************");
        /**
         * 算术右移 相当于除以 2 的 n次方
         * 算术左移 相当于乘以 2 的 n次方
         */
        int a1 = -7 >> 2; // -2 注意整型负数的位运算 取上限
        int a2 = -5 << 2; // -20
        a1 = 7 >> 2; // 1
        a2 = 5 << 3; // 40
        System.out.println(a1);
        System.out.println(a2);
        System.out.println("无符号右移************");
        /**
         * 无符号右移 左边补零
         */
        /**
         * mask 掩码计算
         *
         * 要得到只有第 i 位为 1 的 mask，将 1 向左移动 i-1 位即可，1<<(i-1) 。例如 1<<4 得到只有第 5 位为 1 的 mask ：00010000。
         *
         * 要得到 1 到 i 位为 1 的 mask，(1<<i)-1 即可，例如将 (1<<4)-1 = 00010000-1 = 00001111。
         *
         * 要得到 1 到 i 位为 0 的 mask，只需将 1 到 i 位为 1 的 mask 取反，即 ~((1<<i)-1)。
         */


    }
}
